package com.sp2.dev.test.mongodb;

import com.mongodb.*;

import java.net.UnknownHostException;
import java.util.List;

/**
 * Created by IntelliJ IDEA.
 * User: zhimingli
 * Date: 14-2-11
 * Time: 下午6:21
 * To change this template use File | Settings | File Templates.
 */
public class MongodbConnection {
    //mongodb 默认端口 27017
    // 默认会在所在盘 \data\db下存放数据，如果目录不存在，服务器会启动失败。
    // linux 下 //mkdir -p /data/db/

    /**
     * mongodb 会启动一个非常基本的http服务，监听数字比主端口号1000端口，默认即28017
     * 可通过浏览器获取数据库的管理信息
     *http://localhost:28017/
     *
     * show.databases;//显示当前数据库列表
     * use test;//切换数据库
     * help 可以查看帮助命令
     */

    protected static final String HOST = "127.0.0.1:27017";

    protected static final String dbName = "test";
    protected static final String tableName = "tableName";
    protected static Mongo mongo;

    protected static DB db;

    protected static DBCollection users;

    /**
     * mongodb的java驱动是线程安全的，对于一般应用，只要1个实例即可。（实例即数据库）
     * mongodb内置10个连接池
     * //对于大量写和读的环境，为了确保在一个seesion中使用同一个DB，可以使用一下保证一致性：
     * DB mdb = mongo.getDB("dbname");
     * mdb.requestStart();
     *业务代码省略
     * mdb.requestDone();
     *
     * 保存和查找对象(DBObject)
     *
     * db.createCollection("collName",{size: 20, capped: 5, max: 100});
     */
    static {
        try {
            //连接服务
            mongo = new Mongo(HOST);

            //删除数据库
            //mongo.dropDatabase(tableName);

            //mongodb版本
            String version = mongo.getVersion();
            System.out.println("mongodbVersion："+version);


            //选择数据库
            db = mongo.getDB(dbName);

           

            //判断是否有mongoDB的访问权限，有就返回true，否则返回false。
            // db.authenticate(username, passwd)

            
            //选择连接的表
            users = db.getCollection(tableName);

            //查看一个表的索引
            List<DBObject> indexList = users.getIndexInfo();
            System.out.println("indexList："+indexList.size());
            for(DBObject obj:indexList){
                System.out.println(obj);
            }

            //mongodb支持索引，只要指明需要创建索引的字段，然后指明其是升序（1）还是降序（-1）即可
            users.createIndex(new BasicDBObject("other222",1));
        } catch (UnknownHostException e) {
            e.printStackTrace();
        } catch (MongoException e) {
            e.printStackTrace();
        }
    }

}
